//处理日期的工具类头文件定义
#pragma once

#include "common/lang/string.h"

class DateUtil {
public:
  // 解析 YYYY-MM-DD 格式字符串为基准天数（1970-01-01 为 0）
  // 成功返回天数，失败返回 -1
  static int32_t parse_date(const char *date_str);

  static std::string format_date(int32_t date_days);
  
  //实现对date类型的变量加一个整数天数的方法
  static int32_t add_days(int date, int days);

  // 将日期转换为从基准日期(1970年0月0日)开始的总天数
  static int date_to_total_days(int date);

  // 计算两个日期之间的天数差
  static int get_date_difference(int date1, int date2);

private:
  // 辅助函数：判断年份是否为闰年（内部使用，不对外暴露）
  static bool is_leap_year(int year);
  // 辅助函数：获取指定年月的天数（内部使用，不对外暴露）
  static int get_days_in_month(int year, int month);

  // 日期范围常量（与之前 DateType 保持一致）
  static constexpr int32_t MIN_YEAR = 1970;    // 最小合法年份
  static constexpr int32_t MAX_YEAR = 2038;    // 最大合法年份
  static constexpr int32_t BASE_YEAR = 1970;   // 基准年份（1970-01-01）
  static constexpr int32_t MIN_YEAR_DAYS = 0;     // 最小天数（1970-01-01）
  static constexpr int32_t MAX_YEAR_DAYS = 24855; // 最大天数（2038-02-07）
};